package com.evil.application.api;

import com.evil.application.config.ApplicationFeignErrorDecoder;
import com.evil.common.application.dto.mq.RobotActionMQReqDTO;
import com.evil.common.application.dto.order.data.ControlDataDTO;
import com.evil.common.application.dto.robot.action.RobotActionReqDTO;
import com.evil.common.family.constant.ServiceNameConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * 机器人接口
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
@FeignClient(name = ServiceNameConstant.APPLICATION_SERVICE, configuration = {ApplicationFeignErrorDecoder.class})
public interface RemoteRobotActionService {

    /**
     * 执行机器人 （执行前日志记录）
     *
     * @param robotActionReqDTO robotActionReqDTO
     */
    @PostMapping("/remote/application/robot/action/before")
    List<ControlDataDTO> robotActionBeforeLog(@Validated @RequestBody RobotActionReqDTO robotActionReqDTO);

    /**
     * 执行机器人-判断处理队列方式
     *
     * @param robotActionMQReqDTO robotActionMQReqDTO
     */
    @PostMapping("/remote/application/robot/action/mq")
    List<ControlDataDTO> robotActionMq(@Validated @RequestBody RobotActionMQReqDTO robotActionMQReqDTO);

    /**
     * 执行机器人 （事务补偿）
     *
     * @param robotActionReqDTO robotActionReqDTO
     */
    @PostMapping("/remote/application/robot/action")
    List<ControlDataDTO> robotActionErrorHandle(@Validated @RequestBody RobotActionReqDTO robotActionReqDTO);
}
